package com.atguigu.cloud.service;

import com.atguigu.cloud.entity.LovConfig;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * Lov配置服务接口
 * 
 * @author atguigu
 * @since 2024-01-01
 */
public interface LovConfigService extends IService<LovConfig> {

    /**
     * 根据Lov编码获取配置（带列配置）
     * 
     * @param lovCode Lov编码
     * @return Lov配置
     */
    LovConfig selectByLovCode(String lovCode);

    /**
     * 根据Lov编码获取数据列表（分页）
     * 
     * @param lovCode     Lov编码
     * @param queryParams 查询参数
     * @param pageNum     页码
     * @param pageSize    每页条数
     * @return 数据列表和总数
     */
    Map<String, Object> getLovDataWithPage(String lovCode, Map<String, Object> queryParams, Integer pageNum,
            Integer pageSize);

    /**
     * 根据Lov编码获取数据列表
     * 
     * @param lovCode Lov编码
     * @param keyword 搜索关键词
     * @return 数据列表
     */
    List<Map<String, Object>> getLovData(String lovCode, String keyword);

    /**
     * 根据Lov编码和值获取显示文本
     * 
     * @param lovCode Lov编码
     * @param value   值
     * @return 显示文本
     */
    String getDisplayText(String lovCode, String value);

    /**
     * 保存LOV配置（包含列配置）
     * 
     * @param lovConfig LOV配置
     * @return 是否成功
     */
    boolean saveLovConfigWithColumns(LovConfig lovConfig);

    /**
     * 更新LOV配置（包含列配置）
     * 
     * @param lovConfig LOV配置
     * @return 是否成功
     */
    boolean updateLovConfigWithColumns(LovConfig lovConfig);

    /**
     * 根据Id获取Lov配置
     * 
     * @param id
     * @return
     */
    LovConfig selectById(Long id);

    /**
     * 使用自定义参数查询LOV数据（支持MyBatis动态SQL）
     * 
     * @param lovCode      LOV编码
     * @param customParams 自定义参数Map（支持#{xxx}占位符）
     * @param pageNum      页码
     * @param pageSize     每页条数
     * @return 数据列表和总数
     */
    Map<String, Object> queryWithCustomParams(String lovCode, Map<String, Object> customParams,
            Integer pageNum, Integer pageSize);
}
